﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using Tipler.DataSetler;
using System.Net.Mail;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace IKYSWeb.Siniflar
{
    [Serializable]
    public class Araclar
    {
        public static string ParametreAdGetir(DataSet ds, string AdAlani, string IDAlani, int IDDegeri)
        {
            DataRow[] drRows = ds.Tables[0].Select(IDAlani + " =" + IDDegeri);
            if (drRows.Length > 0)
                return drRows[0][AdAlani].ToString();
            else
                return "Değer bulunamadı";
        }
        //public static string AltBirimlerGetir(int BirimID)
        //{
        //    string Birimler = BirimID.ToString();

        //    AltBirimEkle(ref Birimler, BirimID);

        //    return Birimler;
        //}
        //private static void AltBirimEkle(ref string Birimler, int ParentID)
        //{
        //    foreach (BIRIMPRMDataSet.BIRIMPRMRow drBirim in CachePage.BirimPrmGetir().BIRIMPRM.Select("USTBIRIMID=" + ParentID.ToString()))
        //    {
        //        Birimler += ", " + drBirim.BIRIMID;

        //        int AltMenuSayisi = CachePage.BirimPrmGetir().BIRIMPRM.Select("USTBIRIMID=" + drBirim.BIRIMID).Length;
        //        if (AltMenuSayisi > 0)
        //        {
        //            AltBirimEkle(ref Birimler, drBirim.BIRIMID);
        //        }
        //    }
        //}
        public static bool SistemiciEPostaGonder(string Konu, string Mesaj)
        {
            bool gonderildi = false;

            if (ConfigurationManager.AppSettings["SistemEPostaAdresi"] == null
                || ConfigurationManager.AppSettings["SistemEPostaSifresi"] == null
                || ConfigurationManager.AppSettings["MailSunucuAdresi"] == null
                || ConfigurationManager.AppSettings["HataBildirilecekEPostaAdresleri"] == null)
            {
                throw new Exception("Sistem e-posta bilgileri konfigürasyon dosyasında bulunamadı! <br> Bulunması gereken bilgiler : SistemEPostaAdresi | SistemEPostaSifresi | MailSunucuAdresi | HataBildirilecekEPostaAdresleri");
            }

            string sistemEPostaAdresi = ConfigurationManager.AppSettings["SistemEPostaAdresi"];
            string sistemEPostaSifresi = ConfigurationManager.AppSettings["SistemEPostaSifresi"];
            string mailSunucuAdresi = ConfigurationManager.AppSettings["MailSunucuAdresi"];
            string hataBildirilecekEPostaAdresleri = ConfigurationManager.AppSettings["HataBildirilecekEPostaAdresleri"];

            SmtpClient smtpClient = new SmtpClient();

            MailAddress fromAddress = new MailAddress(sistemEPostaAdresi);
            MailMessage message = new MailMessage();

            smtpClient.Host = mailSunucuAdresi;
            smtpClient.Port = 25;
            //smtpClient.EnableSsl = true;
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Credentials = new System.Net.NetworkCredential(fromAddress.User, sistemEPostaSifresi);
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

            message.From = fromAddress;
            message.Subject = Konu;
            string MailIcerikOnEk = " Mailin geldiği sunucu EndpointType: " + ConfigurationManager.AppSettings["EndpointType"] + "<br>";
            MailIcerikOnEk += " Mailin geldiği URL: " + HttpContext.Current.Request.Url.AbsoluteUri + "<br>";
            message.Body = MailIcerikOnEk + Mesaj;

            string[] mailListesi = hataBildirilecekEPostaAdresleri.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string mailAdresi in mailListesi)
            {
                message.To.Add(new MailAddress(mailAdresi));
            }

            message.IsBodyHtml = true;

            try
            {
                smtpClient.Send(message);
                gonderildi = true;
            }
            catch (Exception ex)
            {
                BasePage.EventLogYaz(ex.Message + System.Environment.NewLine + ex.StackTrace);
                gonderildi = false;
            }
            //#endif
            return gonderildi;
        }

        public static bool EPostaGonder(string Konu, string Mesaj, string MailinGonderilecegiAdresi)
        {
            //#if DEBUG
            bool gonderildi = false;
            //#else
            if (ConfigurationManager.AppSettings["BilgiEPostaAdresi"] == null
                || ConfigurationManager.AppSettings["BilgiEPostaSifresi"] == null
                || ConfigurationManager.AppSettings["MailSunucuAdresi"] == null
                || ConfigurationManager.AppSettings["BilgiVerilecekEPostaAdresleri"] == null)
            {
                throw new Exception("Bilgi e-posta bilgileri konfigürasyon dosyasında bulunamadı! <br> Bulunması gereken bilgiler : BilgiEPostaAdresi | BilgiEPostaSifresi | MailSunucuAdresi | BilgiVerilecekEPostaAdresleri");
            }

            string bilgiEPostaAdresi = ConfigurationManager.AppSettings["BilgiEPostaAdresi"];
            string sistemEPostaSifresi = ConfigurationManager.AppSettings["BilgiEPostaSifresi"];
            string mailSunucuAdresi = ConfigurationManager.AppSettings["MailSunucuAdresi"];
            string hataBildirilecekEPostaAdresleri = ConfigurationManager.AppSettings["BilgiVerilecekEPostaAdresleri"];

            SmtpClient smtpClient = new SmtpClient();


            MailAddress fromAddress = new MailAddress(bilgiEPostaAdresi);
            MailMessage message = new MailMessage();

            smtpClient.Host = mailSunucuAdresi;
            //smtpClient.Port = 25;            
            //smtpClient.EnableSsl = true;
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Credentials = new System.Net.NetworkCredential(fromAddress.User, sistemEPostaSifresi);
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

            message.From = fromAddress;
            message.Subject = Konu;
            message.Body = Mesaj;
            message.To.Add(new MailAddress(MailinGonderilecegiAdresi));

            message.IsBodyHtml = true;

            try
            {
                smtpClient.Send(message);
                gonderildi = true;
            }
            catch (Exception ex)
            {
                gonderildi = false;
                BasePage.EventLogYaz(ex.Message + System.Environment.NewLine + ex.StackTrace);
            }
            return gonderildi;
            //#endif
        }

        public static bool EpostaGecerlimi(string Eposta)
        {
            string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
                + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
                + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";

            Regex ex = new Regex(validEmailPattern, RegexOptions.IgnoreCase);
            return ex.IsMatch(Eposta);
        }
    }
}